﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.SqlClient;

namespace QLMBMT
{
    public partial class FrmQLBanHang : DevExpress.XtraEditors.XtraForm
    {
        // Khai báo
        int sua = 0, stthoadon;
        private DataSet ds = new DataSet();
        private DataTable dt = new DataTable();
        private SqlDataAdapter da = new SqlDataAdapter();
        private SqlCommand com = new SqlCommand();
        classConnection _classConnection = new classConnection();

        // Hàm đưa dữ liệu lên các Lookup Edit và Data GridView
        private void LoadData()
        {
            // Đưa dữ liệu lên LookupEdit và Data GridView
            com = new SqlCommand("Select * from NHAN_VIEN", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupMaNhanVien.Properties.DataSource = ds.Tables[0];

            com = new SqlCommand("Select * from KHACH_HANG", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupKhachHang.Properties.DataSource = ds.Tables[0];


            com = new SqlCommand("Select * from MAT_HANG", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupMaHang.Properties.DataSource = ds.Tables[0];
            GridLookUpBanHangrefMahang.DataSource = ds.Tables[0];

            // đổ dữu liệu vào data gridview
            com = new SqlCommand("Select * from BAN_HANG, HOA_DON where BAN_HANG.STTHOADON = HOA_DON.STTHOADON", _classConnection.con);
            da = new SqlDataAdapter();
            da.SelectCommand = com;
            ds = new DataSet();
            da.Fill(ds);
            dgBanHang.DataSource = ds.Tables[0];

            txtHoadon.DataBindings.Clear();
            txtHoadon.DataBindings.Add("EditValue", dgBanHang.DataSource, "STTHOADON");
            lupMaNhanVien.DataBindings.Clear();
            lupMaNhanVien.DataBindings.Add("EditValue", dgBanHang.DataSource, "MANHANVIEN");
            lupKhachHang.DataBindings.Clear();
            lupKhachHang.DataBindings.Add("EditValue", dgBanHang.DataSource, "MAKHACHHANG");
            dateNgayLap.DataBindings.Clear();
            dateNgayLap.DataBindings.Add("EditValue", dgBanHang.DataSource, "Ngaylap");
            lupMaHang.DataBindings.Clear();
            lupMaHang.DataBindings.Add("EditValue", dgBanHang.DataSource, "MAHANG");
            txtDongia.DataBindings.Clear();
            txtDongia.DataBindings.Add("EditValue", dgBanHang.DataSource, "Dongiaban");
            txtDVT.DataBindings.Clear();
            txtDVT.DataBindings.Add("EditValue", dgBanHang.DataSource, "DVT");
            txtThue.DataBindings.Clear();
            txtThue.DataBindings.Add("EditValue", dgBanHang.DataSource, "VAT");
            numSoluong.DataBindings.Clear();
            numSoluong.DataBindings.Add("Value", dgBanHang.DataSource, "SOLUONGBAN");

            // Thiết lập trạng thái cho các control
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnLuu.Enabled = false;
            btnHuy.Enabled = false;
            btnThoat.Enabled = true;
            btnLuuHoaDon.Enabled = false;
            dgBanHang.Enabled = true;

            txtHoadon.Properties.ReadOnly = true;
            txtThue.Properties.ReadOnly = true;
            txtDVT.Properties.ReadOnly = true;
            txtDongia.Properties.ReadOnly = true;
            lupKhachHang.Properties.ReadOnly = true;
            lupMaHang.Properties.ReadOnly = true;
            lupMaNhanVien.Properties.ReadOnly = true;
            numSoluong.ReadOnly = true;
            dateNgayLap.Properties.ReadOnly = true;

        }

        public FrmQLBanHang()
        {
            InitializeComponent();
            _classConnection.KetNoiCSDL();
        }

        // Xử lí sự kiện Load Form
        private void FrmQLBanHang_Load(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Thêm"
        private void btnThem_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            lupMaNhanVien.Properties.ReadOnly = true;
            lupKhachHang.Properties.ReadOnly = true;
            dateNgayLap.Properties.ReadOnly = true;
            txtHoadon.Properties.ReadOnly = true;

            txtThue.Properties.ReadOnly = false;
            txtDVT.Properties.ReadOnly = false;
            txtDongia.Properties.ReadOnly = false;
            lupMaHang.Properties.ReadOnly = false;
            numSoluong.ReadOnly = false;

            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            btnLuuHoaDon.Enabled = true;
            dgBanHang.Enabled = false;


            txtThue.ResetText();
            txtDVT.ResetText();
            txtDongia.ResetText();
            numSoluong.Value = 1;
        }

        // Xử lí sự kiện Click của nút "Sửa"
        private void btnSua_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            sua = 1;
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            btnLuuHoaDon.Enabled = true;

            lupMaNhanVien.Properties.ReadOnly = true;
            lupKhachHang.Properties.ReadOnly = true;
            dateNgayLap.Properties.ReadOnly = true;
            txtHoadon.Properties.ReadOnly = true;
            txtDVT.Properties.ReadOnly = false;
            txtDongia.Properties.ReadOnly = false;
            txtThue.Properties.ReadOnly = false;
            numSoluong.ReadOnly = false;
            lupMaHang.Properties.ReadOnly = false;
            dgBanHang.Enabled = false;
        }

        // Xử lí sự kiện Click của nút "Xóa"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            // Thiết lập trạng thái cho các control
            btnThem.Enabled = false;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            if (MessageBox.Show("Ban co chac chan muon xoa?", "Thong bao", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                SqlCommand comm = new SqlCommand();
                comm.Connection = _classConnection.con;
                comm.CommandType = CommandType.Text;
                comm.CommandText = "Delete From BAN_HANG Where STTHOADON=@STTHOADON and MAHANG=@MAHANG";
                comm.Parameters.Add("STTHOADON", SqlDbType.Int).Value = txtHoadon.EditValue;
                comm.Parameters.Add("MAHANG", SqlDbType.VarChar).Value = lupMaHang.EditValue;
                comm.ExecuteNonQuery();
                MessageBox.Show("Xoa thanh cong");
                LoadData();

            }
        }

        // Xử lí sự kiện Click của nút "Lưu"
        private void btnLuu_Click(object sender, EventArgs e)
        {
            try
            {
                // Kiểm tra các trường phải nhập dữ liệu đầy đủ
                if (lupMaHang.EditValue == null)
                {
                    MessageBox.Show("Bạn chưa nhập 'Tên mặt hàng' ", "Thông báo");
                    return;
                }

                if (txtDongia.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Đơn giá' ", "Thông báo");
                    return;
                }

                if (txtThue.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Mức thuế' ", "Thông báo");
                    return;
                }

                if (txtDVT.Text == "")
                {
                    MessageBox.Show("Bạn chưa nhập 'Đơn vị tính' ", "Thông báo");
                    return;
                }

                if (sua == 0)
                {
                    // Kiểm tra Mã mặt hàng khi đã tồn tại trong CSDL hay chưa thêm một mặt hàng mới 
                    SqlCommand comm = new SqlCommand();
                    comm.Connection = _classConnection.con;
                    comm.CommandType = CommandType.Text;
                    comm.CommandText = "Select * From BAN_HANG Where MAHANG=@MAHANG and STTHOADON = @STTHOADON";
                    comm.Parameters.Add("MAHANG", SqlDbType.VarChar).Value = lupMaHang.EditValue;
                    comm.Parameters.Add("STTHOADON", SqlDbType.VarChar).Value = txtHoadon.EditValue;
                    comm.ExecuteNonQuery();
                    da = new SqlDataAdapter();
                    ds = new DataSet();
                    da.SelectCommand = comm;
                    da.Fill(ds);
                    dt = ds.Tables[0];
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        MessageBox.Show("Đã tồn tại Loại hàng có tên '" + lupMaHang.Text.ToUpper() + "' trong Hóa đơn '" + txtHoadon.Text.ToUpper() + "'! \nVui lòng kiểm tra lại!");
                        return;
                    }    

                    //Thêm dữ liệu vào CSDL
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Insert Into BAN_HANG Values(@MAHANG,@STTHOADON,@SOLUONGBAN,@DONGIABAN,@DVT,@VAT)";

                    com.Parameters.Add("@STTHOADON", SqlDbType.Int).Value = txtHoadon.EditValue;
                    com.Parameters.Add("@DVT", SqlDbType.VarChar).Value = txtDVT.EditValue;
                    com.Parameters.Add("@DONGIABAN", SqlDbType.VarChar).Value = txtDongia.EditValue;
                    com.Parameters.Add("@MAHANG", SqlDbType.NVarChar).Value = lupMaHang.EditValue;
                    com.Parameters.Add("@VAT", SqlDbType.VarChar).Value = txtThue.EditValue;
                    com.Parameters.Add("@SOLUONGBAN", SqlDbType.Int).Value = numSoluong.Value;
                    com.ExecuteNonQuery();

                    MessageBox.Show("Đã thêm mặt hàng thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    // Cập nhật dữ liệu của CSDL
                    txtHoadon.Properties.ReadOnly = true;
                    com = _classConnection.con.CreateCommand();
                    com.CommandText = "Update BAN_HANG set MAHANG = @MAHANG, STTHOADON= @STTHOADON, SOLUONGBAN= @SOLUONGBAN, DONGIABAN = @DONGIABAN , DVT = @DVT ,VAT= @VAT where STTHOADON=@STTHOADON AND MAHANG=@MAHANG";

                    com.Parameters.Add("@STTHOADON", SqlDbType.Int).Value = txtHoadon.EditValue;
                    com.Parameters.Add("@DVT", SqlDbType.VarChar).Value = txtDVT.EditValue;
                    com.Parameters.Add("@DONGIABAN", SqlDbType.VarChar).Value = txtDongia.EditValue;
                    com.Parameters.Add("@MAHANG", SqlDbType.NVarChar).Value = lupMaHang.EditValue;
                    com.Parameters.Add("@VAT", SqlDbType.VarChar).Value = txtThue.EditValue;
                    com.Parameters.Add("@SOLUONGBAN", SqlDbType.Int).Value = numSoluong.Value;

                    com.ExecuteNonQuery();

                    MessageBox.Show("Đã cập nhật thông tin mặt hàng của phiếu nhập hàng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);


                }
                LoadData();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        // Xử lí sự kiện Click của nút "Hủy"
        private void btnHuy_Click(object sender, EventArgs e)
        {
            LoadData();
        }

        // Xử lí sự kiện Click của nút "Thoát"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
            _classConnection.con.Close();
        }

        // Xử lí sự kiện Click của nút "Lưu hóa đơn"
        private void btnLuuHoaDon_Click(object sender, EventArgs e)
        {
            // Kiểm tra các trường phải được nhập dữ liệu đầy đủ
            if (lupKhachHang.EditValue == null)
            {
                MessageBox.Show("Bạn chưa nhập 'Tên Khách hang' ", "Thông báo");
                return;
            }
            if (lupMaNhanVien.EditValue == null)
            {
                MessageBox.Show("Bạn chưa nhập 'Tên Nhân viên' ", "Thông báo");
                return;
            }


            if (dateNgayLap.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập 'Ngày Lập' ", "Thông báo");
                return;
            }

            if (lupMaHang.EditValue == null)
            {
                MessageBox.Show("Bạn chưa nhập 'Tên Mặt Hàng' ", "Thông báo");
                return;
            }

            if (txtDongia.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập 'Đơn giá' ", "Thông báo");
                return;
            }

            if (txtDVT.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập 'ĐVT' ", "Thông báo");
                return;
            }

            if (txtThue.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập 'Thuế' ", "Thông báo");
                return;
            }

          
            // Lưu hóa đơn mới vào cơ sở dữ liệu
            com = _classConnection.con.CreateCommand();
            com.CommandText = "Insert Into HOA_DON Values(@STTHOADON, @MANHANVIEN, @MAKHACHHANG, @NGAYLAP)";
            com.Parameters.Add("@STTHOADON", SqlDbType.Int).Value = txtHoadon.EditValue;
            com.Parameters.Add("@MANHANVIEN", SqlDbType.VarChar).Value = lupMaNhanVien.EditValue;
            com.Parameters.Add("@MAKHACHHANG", SqlDbType.VarChar).Value = lupKhachHang.EditValue;
            com.Parameters.Add("@NGAYLAP", SqlDbType.DateTime).Value = dateNgayLap.DateTime.Date;
            com.ExecuteNonQuery();

            // Lưu mặt hàng thuộc một hóa đơn vào cơ sở dữ liệu
            com = _classConnection.con.CreateCommand();
            com.CommandText = "Insert Into BAN_HANG Values(@MAHANG,@STTHOADON,@SOLUONGBAN,@DONGIABAN,@DVT,@VAT)";
            com.Parameters.Add("@STTHOADON", SqlDbType.Int).Value = txtHoadon.EditValue;
            com.Parameters.Add("@DVT", SqlDbType.VarChar).Value = txtDVT.EditValue;
            com.Parameters.Add("@DONGIABAN", SqlDbType.VarChar).Value = txtDongia.EditValue;
            com.Parameters.Add("@MAHANG", SqlDbType.NVarChar).Value = lupMaHang.EditValue;
            com.Parameters.Add("@VAT", SqlDbType.VarChar).Value = txtThue.EditValue;
            com.Parameters.Add("@SOLUONGBAN", SqlDbType.Int).Value = numSoluong.Value;
            com.ExecuteNonQuery();

            // Thiết lập trạng thái cho các control
            lupMaNhanVien.Properties.ReadOnly = true;
            lupKhachHang.Properties.ReadOnly = true;
            dateNgayLap.Properties.ReadOnly = true;
            txtHoadon.Properties.ReadOnly = true;

            txtThue.Properties.ReadOnly = true;
            txtDVT.Properties.ReadOnly = true;
            txtDongia.Properties.ReadOnly = true;
            lupMaHang.Properties.ReadOnly = true;
            numSoluong.ReadOnly = true;

            btnThem.Enabled = true;
            btnSua.Enabled = false;
            btnXoa.Enabled = false;
            btnLuu.Enabled = false;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            btnLuuHoaDon.Enabled = false;
        }

        // Xử lí sự kiện Click của nút "Hóa đơn mới"
        private void laToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Đưa dữ liệu lên các Lookup Edit và Data GridView
            com = new SqlCommand("Select * from NHAN_VIEN", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupMaNhanVien.Properties.DataSource = ds.Tables[0];

            com = new SqlCommand("Select * from KHACH_HANG", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupKhachHang.Properties.DataSource = ds.Tables[0];


            com = new SqlCommand("Select * from MAT_HANG", _classConnection.con);
            da = new SqlDataAdapter();
            ds = new DataSet();
            da.SelectCommand = com;
            da.Fill(ds);
            lupMaHang.Properties.DataSource = ds.Tables[0];
            GridLookUpBanHangrefMahang.DataSource = ds.Tables[0];

            // Code tự động tăng STT Hóa đơn khi Người dùng thêm mới một Hóa đơn
            com = new SqlCommand("select max (STTHOADON) from HOA_DON", _classConnection.con);

            try
            {
                stthoadon = Convert.ToInt32(com.ExecuteScalar());

            }
            catch (Exception ex)
            {
                stthoadon = 0;
                MessageBox.Show(ex.Message, "Thong bao");

            }
            stthoadon++;
            txtHoadon.Text = stthoadon.ToString();

            // Thiết lập trạng thái cho các control
            btnThem.Enabled = true;
            btnSua.Enabled = true;
            btnXoa.Enabled = true;
            btnLuu.Enabled = false;
            btnHuy.Enabled = true;
            btnThoat.Enabled = true;
            btnLuuHoaDon.Enabled = true;

            
            txtThue.ResetText();
            txtDVT.ResetText();
            txtDongia.ResetText();
            lupKhachHang.EditValue = null;
            lupMaHang.EditValue = null;
            lupMaNhanVien.EditValue = null;
            numSoluong.Value = 1;
            dateNgayLap.EditValue = System.DateTime.Today.Date; ;


            txtHoadon.Properties.ReadOnly = true;
            txtThue.Properties.ReadOnly = false;
            txtDVT.Properties.ReadOnly = false;
            txtDongia.Properties.ReadOnly = false;
            lupKhachHang.Properties.ReadOnly = false;
            lupMaHang.Properties.ReadOnly = false;
            lupMaNhanVien.Properties.ReadOnly = false;
            numSoluong.ReadOnly = false;
            dateNgayLap.Properties.ReadOnly = false;
            dgBanHang.Enabled = false;
        }

        // Code chỉ cho phép nhập số vào trường "Đơn giá" 
        private void txtDongia_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
        }

        // Code chỉ cho phép nhập số vào trường Thuế
        private void txtThue_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
        }

        private void inHóaĐơnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FrmInHD f = new FrmInHD();
            f.STTHOADON = Convert.ToInt32(txtHoadon.EditValue);
            f.ShowDialog();
        }

      
    }
}